<?php
/**
 * --------------------------------------------------------------------
 * MCore精简框架
 * 作者：阿枫，QQ：52037872，Email：support@mdeve.com
 * --------------------------------------------------------------------
 *
 * SVN revision information:
 * @version $Revision: 1 $:
 * @author  $Author: zy $:
 * @date      $Date: 2017-03-10 21:12:21 +0800 (星期五, 10 三月 2017) $:
 */

class _CacheClass extends __basic_def{

    protected $cache_type = "file";
    protected $cache_id = null;
    /**
     * 传入的参数为使用缓存的类型
     * @param string $cache_type
     */
    function __construct($cache_type=''){
        global $config;
        if(!strlen($cache_type)) $cache_type = $config['memory']["type"];
        if(!strlen($cache_type)) $cache_type = "file";
        $this->cache_type = $cache_type;
        $cache_class = "Cache".ucfirst($cache_type);
        $cache_driver_path = dirname(__FILE__).'/drivers/';
        $cache_driver_file = $cache_driver_path . "cache_{$cache_type}.class.php";
        if(file_exists($cache_driver_file)){
            // 读取系统数据库驱动目录
            require $cache_driver_file;
            // 检查驱动类
            if(class_exists($cache_class)) {
                $this->cache_id = new $cache_class();
                if(!$this->cache_id->_enable) halt("Cache ". $cache_type. " not allow!");
            }else{
                // 类没有定义
                halt("Driver ". $cache_type. " not found!");
            }
        }else{
            halt("Cache {$cache_type} is not support!");
        }
    }

    /**
     * 返回是否支持缓存，在使用前先判断，否则不支持的话强行使用会出错。
     * @return boolean
     */
    function is_support(){
        return $this->cache_id->_enable;
    }
    /**
     * 判断缓存变量是否存在
     * @param string $key
     * @return bool
     */
    public function exists($key){
        return $this->cache_id->exists ( $key );
    }


    /**
     * 读缓存变量
     *
     * @param string $key
     * @return mixed
     */
    public function fetch($key) {
        return $this->cache_id->fetch ( $key );

    }

    /**
     * 缓存变量
     *
     * @param string $key 缓存键
     * @param string $value 缓存内容，可以会字符串、数字、数组，不能对对象！
     * @param int 缓存时间，单位秒，如果为0则永远缓存，直到手动清理缓存数据，服务器重启也会保留！
     * @return bool
     */
    public function store($key, $value, $time=0) {
        return $this->cache_id->store ( $key, $value , $time );
    }

    /**
     * 删除缓存变量
     *
     * @param string $key
     * @return bool
     */
    public function delete($key) {
        return $this->cache_id->delete ( $key );

    }

    /**
     * 清(删)除所有缓存
     *
     * @param string $cache_type 缓存类型，默认为 user ，否则系统缓存(缓存文件)将被清除
     * @return bool
     */
    public function clear($cache_type="user") {
        return $this->cache_id->clear ($cache_type);

    }


    /**
     * 用通配符来获取 key 列表，仅redis可用，详见：http://redis.io/commands/keys
     *
     * @param $key
     * @return mixed
     *
     */
    public function keys($key) {
        if($this->cache_type != "redis") return null;
        return $this->cache_id->keys( $key );
    }


    /**
     * 返回缓存服务器使用状态
     *
     * @return array|null
     */
    public function server_info(){
        return $this->cache_id->server_info();
    }
}